package com.hyf.gateway.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Component
public class OutagePeriodFilter extends ZuulFilter {


    /**
     *                  pre：路由之前
     * 					routing：路由之时
     * 					post： 路由之后   用来修改返回response的值
     * 					error：发送错误调用
     * @return
     */

    @Override
    public String filterType() {
        return FilterConstants.ROUTE_TYPE;
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return isOutagePeriod();
    }


    /**
     *  重定向的规则,根据key来重定向到val.
     */
    private static Map<String, String> urlMap=new HashMap<String, String>();
    static {
        urlMap.put("t", "/test/");
    }

    @Override
    public Object run() {

        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String url = request.getRequestURI(); // 列子 [/user/login/loginWx]
        System.out.println("=====url:"+url);
        String[] split = url.split("/", 3);	// 这里切割一下,好让下面判断是否是需要修改url的.
        if (split.length>=2) {
            String val = urlMap.get(split[1]);
            if (StringUtils.isNotEmpty(val)) {
                url=url.replaceFirst("/"+split[1]+"/", val);// 根据配置好的去将url替换掉,这里可以写自己的转换url的规则
                ctx.put(FilterConstants.REQUEST_URI_KEY, url); // 将替换掉的url set进去,在对应的转发请求的url就会使用这个url
            }
        }
        return null;
    }


    private boolean isOutagePeriod() {
        // returns true if outage
        return true;
    }
}
